<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        canvas{
            border:1px solid #ccc;
            width:300px;
            height: 300px;
        }
    </style>
</head>
<body>

    <script>
        {
            var canvas = document.createElement("canvas");
            canvas.width = 100 ;
            canvas.height = 100 ;
            document.body.append(canvas);
            
            var ctx = canvas.getContext('2d');
            ctx.fillRect(10,10,80,80);
        }
        
        {
            var canvas = document.createElement("canvas");
            canvas.width = 100 ;
            canvas.height = 100 ;
            document.body.append(canvas);
            
            var ctx = canvas.getContext('2d');
            ctx.beginPath();
            ctx.moveTo(10,10);
            ctx.lineTo(90,10);
            ctx.stroke();

            ctx.moveTo(10,90);
            ctx.lineTo(90,90);
            ctx.closePath();
            ctx.stroke();

            ctx.strokeRect(20,20,60,60);
        }


        {
            var canvas = document.createElement("canvas");
            canvas.width = 100 ;
            canvas.height = 100 ;
            document.body.append(canvas);
            
            var ctx = canvas.getContext('2d');
            ctx.moveTo(10,10);
            ctx.lineTo(90,10);
            ctx.lineTo(90,90);
            ctx.lineTo(10,10);
            ctx.stroke();
            ctx.stroke();
            
        }

        {
            var canvas = document.createElement("canvas");
            canvas.width = 500 ;
            canvas.height = 500 ;
            document.body.append(canvas);
            if (canvas.getContext){
                var ctx = canvas.getContext('2d');

                roundedRect(ctx, 12, 12, 150, 150, 15);
                roundedRect(ctx, 19, 19, 150, 150, 9);
                roundedRect(ctx, 53, 53, 49, 33, 10);
                roundedRect(ctx, 53, 119, 49, 16, 6);
                roundedRect(ctx, 135, 53, 49, 33, 10);
                roundedRect(ctx, 135, 119, 25, 49, 10);

                ctx.beginPath();
                ctx.arc(37, 37, 13, Math.PI / 7, -Math.PI / 7, false);
                ctx.lineTo(31, 37);
                ctx.fill();

                for(var i = 0; i < 8; i++){
                ctx.fillRect(51 + i * 16, 35, 4, 4);
                }

                for(i = 0; i < 6; i++){
                ctx.fillRect(115, 51 + i * 16, 4, 4);
                }

                for(i = 0; i < 8; i++){
                ctx.fillRect(51 + i * 16, 99, 4, 4);
                }

                ctx.beginPath();
                ctx.moveTo(83, 116);
                ctx.lineTo(83, 102);
                ctx.bezierCurveTo(83, 94, 89, 88, 97, 88);
                ctx.bezierCurveTo(105, 88, 111, 94, 111, 102);
                ctx.lineTo(111, 116);
                ctx.lineTo(106.333, 111.333);
                ctx.lineTo(101.666, 116);
                ctx.lineTo(97, 111.333);
                ctx.lineTo(92.333, 116);
                ctx.lineTo(87.666, 111.333);
                ctx.lineTo(83, 116);
                ctx.fill();

                ctx.fillStyle = "white";
                ctx.beginPath();
                ctx.moveTo(91, 96);
                ctx.bezierCurveTo(88, 96, 87, 99, 87, 101);
                ctx.bezierCurveTo(87, 103, 88, 106, 91, 106);
                ctx.bezierCurveTo(94, 106, 95, 103, 95, 101);
                ctx.bezierCurveTo(95, 99, 94, 96, 91, 96);
                ctx.moveTo(103, 96);
                ctx.bezierCurveTo(100, 96, 99, 99, 99, 101);
                ctx.bezierCurveTo(99, 103, 100, 106, 103, 106);
                ctx.bezierCurveTo(106, 106, 107, 103, 107, 101);
                ctx.bezierCurveTo(107, 99, 106, 96, 103, 96);
                ctx.fill();

                ctx.fillStyle = "black";
                ctx.beginPath();
                ctx.arc(101, 102, 2, 0, Math.PI * 2, true);
                ctx.fill();

                ctx.beginPath();
                ctx.arc(89, 102, 2, 0, Math.PI * 2, true);
                ctx.fill();
            }

            // 封装的一个用于绘制圆角矩形的函数。

            function roundedRect(ctx, x, y, width, height, radius){
            ctx.beginPath();
            ctx.moveTo(x, y + radius);
            ctx.lineTo(x, y + height - radius);
            ctx.quadraticCurveTo(x, y + height, x + radius, y + height);
            ctx.lineTo(x + width - radius, y + height);
            ctx.quadraticCurveTo(x + width, y + height, x + width, y + height - radius);
            ctx.lineTo(x + width, y + radius);
            ctx.quadraticCurveTo(x + width, y, x + width - radius, y);
            ctx.lineTo(x + radius, y);
            ctx.quadraticCurveTo(x, y, x, y + radius);
            ctx.stroke();
            }
        }

        {
            const canvas = document.createElement('canvas');
            canvas.width = 400 ;
            canvas.height = 400 ;
            document.body.append(canvas) ;

            const ctx = canvas.getContext('2d');
            ctx.moveTo(100,100);
            ctx.bezierCurveTo(100,30,200,30,200,100);
            ctx.bezierCurveTo(200,170,100,170,100,100);
            ctx.stroke();
        }

        {
            const canvas = document.createElement('canvas');
            canvas.width = 400 ;
            canvas.height = 400 ;
            document.body.append(canvas) ;

            const ctx = canvas.getContext('2d');
            const gradient = ctx.createRadialGradient(155,200,50,200,200,100);
            gradient.addColorStop(0,'#f00');
            gradient.addColorStop(1,'#ff0');

            ctx.fillStyle = gradient ;
            ctx.fillRect(0,0,canvas.width,canvas.height);
        }

        {
            const canvas = document.createElement('canvas');
            canvas.width = 400 ;
            canvas.height = 400 ;
            document.body.append(canvas) ;
            const ctx = canvas.getContext("2d");

            // Create a conic gradient
            // The start angle is 0
            // The center position is 100, 100
            const gradient = ctx.createConicGradient(Math.PI/4, 200, 200);

            // Add five color stops
            gradient.addColorStop(0, "red");
            gradient.addColorStop(0.5, "blue");
            gradient.addColorStop(0.5, "red");
            gradient.addColorStop(1, "blue");

            // Set the fill style and draw a rectangle
            ctx.fillStyle = gradient;
            ctx.fillRect(0, 0, 400, 400);

        }
    </script>
</body>
</html>